<template>
  <basic-container>
    <avue-crud
      :option="option"
      :table-loading="loading"
      :data="data"
      :page.sync="page"
      :permission="permissionList"
      :before-open="beforeOpen"
      :upload-preview="uploadPreview"
      :upload-after="uploadAfter"
      v-model="form"
      ref="crud"
      @row-update="rowUpdate"
      @row-save="rowSave"
      @row-del="rowDel"
      @search-change="searchChange"
      @search-reset="searchReset"
      @selection-change="selectionChange"
      @current-change="currentChange"
      @size-change="sizeChange"
      @refresh-change="refreshChange"
      @on-load="onLoad"
    >
      <template slot="menuLeft">
        <el-button type="danger" size="small" icon="el-icon-delete" plain v-if="permission.filestemplate_delete" @click="handleDelete">删 除</el-button>
      </template>
    </avue-crud>
  </basic-container>
</template>

<script>
import { getList, getDetail, add, update, remove } from '@/api/module/filestemplate';
import { mapGetters } from 'vuex';
import { fileSuffix } from '@/util/common-data.js';
export default {
  data() {
    return {
      form: {
        icon: [],
        files: []
      },
      query: {
         descs:'create_time'
      },
      loading: true,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
      },
      selectionList: [],
      option: {
        labelWidth:130,
        height: 'auto',
        calcHeight: 30,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        border: true,
        index: true,
        viewBtn: true,
        selection: true,
        dialogClickModal: true,
        limit: 1,
        column: [
          {
            label: '文件名称',
            prop: 'name',
            rules: [
              {
                required: true,
                message: '请输入文件名称',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '文件模板归属',
            prop: 'filesType',
            type: 'select',
            dicData: [
              {
                label: '规范文件管理',
                value: 1
              },
              {
                label: '质量手册文件管理',
                value: 2
              },
              {
                label: '程序文件管理',
                value: 3
              },
              {
                label: '记录文件管理',
                value: 4
              },
              {
                label: '外来文件管理',
                value: 5
              }
            ],
            rules: [
              {
                required: true,
                message: '请选择文件类型',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '文件',
            prop: 'files',
            type: 'upload',
            hide: true,
            drag: true,
            loadText: '文件上传中，请稍等',
            span: 12,
            showFileList:false,
            propsHttp: {
              res: 'data',
              url: 'link',
              home:'domain',
              name:'originalName'
            },
            action: '/api/blade-resource/oss/endpoint/put-file-attach',
            uploadBefore:(file,done,loading)=>{
              console.log(file)
              const fileName = file.name;
              const fileStrArr = fileName.split('.');
              const suffix = fileStrArr[fileStrArr.length - 1];
              let result = fileSuffix.some(item => {
                return item === suffix;
              });
              if (!result) {
                loading();
                this.$message.error('不支持该文件类型');
                return false;
              }
              done();
            },
            rules: [
              {
                required: true,
                message: '请上传文件',
                trigger: 'blur'
              }
            ]
          }
        ]
      },
      data: []
    };
  },
  computed: {
    ...mapGetters(['permission']),
    permissionList() {
      return {
        addBtn: this.vaildData(this.permission.filestemplate_add, false),
        viewBtn: this.vaildData(this.permission.filestemplate_view, false),
        delBtn: this.vaildData(this.permission.filestemplate_delete, false),
        editBtn: this.vaildData(this.permission.filestemplate_edit, false)
      };
    },
    ids() {
      let ids = [];
      this.selectionList.forEach(ele => {
        ids.push(ele.id);
      });
      return ids.join(',');
    }
  },
  methods: {
    uploadPreview(file, column, done) {
      // console.log(file, column);
      this.preContent(file,6)
      // done(); //默认执行打开方法

    },
    uploadAfter(row, done, loading, column) {
      console.log(column);
      if (column.prop == 'files') {
        this.form.files = [];
        // this.$set()
        this.form.files.push(row.link);
      } else {
        this.form.icon = [];
        this.form.icon.push(row.link);
      }

      done();
    },
    rowSave(row, done, loading) {
      console.log(row);
      let files= row.files.map(item => item.value).join(',');
      // row.icon = row.icon.map(item => item.label).join(',');
      row.files = files;
       console.log(row)
      add(row).then(
        () => {
          this.onLoad(this.page);
          this.$message({
            type: 'success',
            message: '操作成功!'
          });
          done();
        },
        error => {
          loading();
          window.console.log(error);
        }
      );
    },
    rowUpdate(row, index, done, loading) {
      update(row).then(
        () => {
          this.onLoad(this.page);
          this.$message({
            type: 'success',
            message: '操作成功!'
          });
          done();
        },
        error => {
          loading();
          console.log(error);
        }
      );
    },
    rowDel(row) {
      this.$confirm('确定将选择数据删除?', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      })
        .then(() => {
          return remove(row.id);
        })
        .then(() => {
          this.onLoad(this.page);
          this.$message({
            type: 'success',
            message: '操作成功!'
          });
        });
    },
    handleDelete() {
      if (this.selectionList.length === 0) {
        this.$message.warning('请选择至少一条数据');
        return;
      }
      this.$confirm('确定将选择数据删除?', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      })
        .then(() => {
          return remove(this.ids);
        })
        .then(() => {
          this.onLoad(this.page);
          this.$message({
            type: 'success',
            message: '操作成功!'
          });
          this.$refs.crud.toggleSelection();
        });
    },
    beforeOpen(done, type) {
      if (['edit', 'view'].includes(type)) {
        getDetail(this.form.id).then(res => {
          this.form = res.data.data;
        });
      }
      done();
    },
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
      done();
    },
    selectionChange(list) {
      this.selectionList = list;
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.crud.toggleSelection();
    },
    currentChange(currentPage) {
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize) {
      this.page.pageSize = pageSize;
    },
    refreshChange() {
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = {}) {
      this.loading = true;
      getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        this.loading = false;
        this.selectionClear();
      });
    }
  }
};
</script>

<style></style>
